/** @file         cmd.h
 *  @brief        cmd 处理的接口文件
 *  @details      详细说明
 *  @date         2020/08/18
 *  @version      v1.1
 *
 ***********************************************************************************
 *
 *  @attention
 *                在 Linux 上运行, 跨平台需要考虑 移植 申请内存接口
 *                参考来自: jiejieTop@https://github.com/jiejieTop 
 *  @par 修改日志:
 *  <table>
 *  <tr><td>2020/05/29  <td>1.0      <td>jiejie    <td>创建初始版本
 *  <tr><td>2020/08/18  <td>1.1      <td>Schips	   <td>引入内核链表
 *  <tr><td>2020/09/23  <td>1.2      <td>Schips	   <td>回调函数现在可以使用返回值了
 *  </table>
 *
 **********************************************************************************
 */

#ifndef _CMD_H_
#define _CMD_H_
#include <stdlib.h>
#include "kernel_list.h"

#define CMD_HASH 0x61c88647

/*! \enum PARSING_STATUS
 *
 *  Detailed description : 调用 cmd_parsing 执行命令的返回值
 */
enum PARSING_STATUS {
    CMD_OK = 0,
    CMD_NOT_FOUND,
    CMD_INVALID_ARG,
};

typedef void (*cmd_handler)(void);

typedef struct _cmd {
    const char*     cmd;     // 命令的名字（用于匹配）
    const char*     desc;    // 命令的详细描述
    unsigned int    hash;    // 用于判断的hash
    cmd_handler     handler; // 命令的响应函数
} cmd_t;

typedef struct node			// Linknode carry the substance
{
	struct _cmd       cmd;       
	struct list_head list;
}linknode, *linknode_p;

// 构造、析构内部对象
void cmd_init(void);
void cmd_deinit(void);
// 处理命令
//void cmd_parsing(char *str);
long long cmd_parsing(const char *str);
// 注册命令
void REGISTER_CMD(const char* cmd_str, cmd_handler handler,const char* desc_str);
// 供回调函数使用的通信接口
void set_cmd_callback_flag(long long flag);
long long  get_cmd_callback_flag(void);

#endif
